
#include <qt4/QtCore/qstring.h>

#include "XML.h"

XML::XML() {
    file = "./Resultados.xml";
}

XML::~XML() {
    file.clear();
}

void XML::createXML(const vector< pair<string, float> > &question, vector<Rcons> entrys) {
    ofstream f_XML(file.c_str(), ios::trunc);
    if (f_XML.is_open()) {
        f_XML << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl;
        f_XML << "<!DOCTYPE Resultado SYSTEM \"Resultados.dtd\">" << endl;
        f_XML << "<?xml-stylesheet type=\"text/xsl\" href=\"Resultados.xsl\"?>" << endl;
        f_XML << "<Resultado>" << endl;
        f_XML << questionXML(question) << endl;
        f_XML << documentoXML(entrys) << endl;
        f_XML << "</Resultado>" << endl;
        f_XML.close();
    }
}

string XML::questionXML(const vector< pair<string, float> > &question) {
    string cad = "";

    cad.append("\t<Pregunta>\n");

    for (int i = 0; i < question.size(); i++) {
        cad.append("\t\t<Item>\n");
        cad.append("\t\t\t<term>");
        cad.append(question.at(i).first);
        cad.append("</term>\n");
        cad.append("\t\t\t<peso>");
        ostringstream ss;
        ss << question.at(i).second;
        cad.append(ss.str());
        cad.append("</peso>\n");
        cad.append("\t\t</Item>\n");
    }

    cad.append("\t</Pregunta>\n");

    return cad;
}

string XML::documentoXML(vector<Rcons> entrys) {
    string cad = "";
    vector<Rcons>::iterator it;
    for (it = entrys.begin(); it != entrys.end(); it++) {
        QString val_aux;
        cad.append("<Documento ID=\"");
        val_aux.setNum((*it).Identification);
        cad.append(val_aux.toStdString());
        cad.append("\">\n"); 
        cad.append("<Titulo>");
        cad.append((*it).Title);    
        cad.append("</Titulo>\n");
        cad.append("<Relevancia>");
        val_aux.setNum((*it).Perc);
        cad.append(val_aux.toStdString());
        cad.append("</Relevancia>\n");
        cad.append("<Texto>");
        cad.append((*it).File);
        cad.append("</Texto>\n");
        cad.append("</Documento>\n");
    }
    return cad;
}
